package view;

import javax.swing.JPanel;
import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.AbstractListModel;

import java.awt.Color;

import javax.swing.border.LineBorder;

import controlador.Tragamonedas;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.ArrayList;



public class PanelJugar extends JPanel implements ActionListener {

	private static final long serialVersionUID = 1L;
	private JLabel lblJugar;
	private JButton btnJugar;
	private JList<String> list;
	private Tragamonedas sys;
	private JButton btnCobrar;
	private JLabel lblSaldo;
	private JTextField textField_Saldo;
	private JButton btnCobrarPremiosPendientes;
	private JTextField textField_credito;
	private JLabel lblCargarCredito;
	private JButton btnAcreditar;
	private JLabel lblAcumulado;
	private JTextField textField_acumulado;
	private JLabel lblAdvertenciaAlAbandonar;
	private JLabel lblYLosPremios;

	public PanelJugar(Tragamonedas sys) {
		this.sys = sys;
		setLayout(null);

		lblJugar = new JLabel("Jugar");
		lblJugar.setBounds(138, 11, 86, 23);
		lblJugar.setFont(new Font("Tahoma", Font.BOLD, 13));
		add(lblJugar);
		
		btnCobrarPremiosPendientes = new JButton();
		btnCobrarPremiosPendientes.setBounds(219, 277, 202, 23);
		btnCobrarPremiosPendientes.setText("Cobrar premios acumulados");
		btnCobrarPremiosPendientes.addActionListener(this);
		add(btnCobrarPremiosPendientes);

		btnJugar = new JButton("Jugar");
		btnJugar.setBounds(25, 243, 137, 23);
		btnJugar.addActionListener(this);
		add(btnJugar);

		list = new JList<String>();
		list.setBounds(28, 148, 280, 84);
		list.setBorder(new LineBorder(Color.BLACK));
		list.setBackground(Color.GRAY);
		list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
		add(list);

		btnCobrar = new JButton("Retirarse");
		btnCobrar.setBounds(185, 243, 125, 23);
		btnCobrar.addActionListener(this);
		add(btnCobrar);

		lblSaldo = new JLabel("Saldo:");
		lblSaldo.setBounds(25, 65, 108, 14);
		add(lblSaldo);
		
		textField_Saldo = new JTextField();
		textField_Saldo.setBounds(138, 62, 86, 20);
		textField_Saldo.setEnabled(false);
		textField_Saldo.setEditable(false);
		textField_Saldo.setColumns(10);
		add(textField_Saldo);

		
		textField_credito = new JTextField();
		textField_credito.setBounds(138, 98, 86, 20);
		add(textField_credito);
		textField_credito.setColumns(10);
		
		lblCargarCredito = new JLabel("Cargar Credito:");
		lblCargarCredito.setBounds(25, 101, 103, 14);
		add(lblCargarCredito);
		
		btnAcreditar = new JButton("Acreditar");
		btnAcreditar.setBounds(233, 97, 91, 23);
		add(btnAcreditar);
		btnAcreditar.addActionListener(this);
		
		lblAcumulado = new JLabel("Total Acumulado:");
		lblAcumulado.setBounds(10, 281, 103, 14);
		add(lblAcumulado);
		
		textField_acumulado = new JTextField();
		textField_acumulado.setEditable(false);
		textField_acumulado.setEnabled(false);
		textField_acumulado.setBounds(123, 278, 86, 20);
		add(textField_acumulado);
		textField_acumulado.setColumns(10);
		
		//SI se fue y no cobro nada pierde todo
		textField_Saldo.setText("0");
		textField_acumulado.setText("0");
		
		lblAdvertenciaAlAbandonar = new JLabel("Advertencia: al abandonar este panel se perdera el saldo");
		lblAdvertenciaAlAbandonar.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblAdvertenciaAlAbandonar.setBounds(10, 306, 373, 23);
		add(lblAdvertenciaAlAbandonar);
		
		lblYLosPremios = new JLabel("Y los premios acumulados no cobrados.");
		lblYLosPremios.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblYLosPremios.setBounds(10, 322, 373, 23);
		add(lblYLosPremios);
		sys.limpiarAcumulado();
	}

	@Override
	public void actionPerformed(ActionEvent event) {
		if (event.getSource() == btnCobrar) {
			JOptionPane.showMessageDialog(null, this.sys.cobrarCredito(), "Info", JOptionPane.OK_OPTION);
			textField_Saldo.setText(String.valueOf(this.sys.getCredito()));
		
		} 
		else if (event.getSource() == btnJugar) {
			
			try { //Le doy tiempo para que el ID de la transaccion sea 1 seg mayor
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
			try {
				final ArrayList<String> tempJugada = sys.Jugar();
				final ArrayList<String> tempSinCredito = new ArrayList<String>();
				tempSinCredito.add("Imposible Jugar");
				textField_Saldo.setText(String.valueOf(this.sys.getCredito()));
				this.textField_acumulado.setText(String.valueOf(sys.getPremioAcumulado()));
				
				if (tempJugada != null) {
					list.setModel(new AbstractListModel<String>() {

						private static final long serialVersionUID = 1L;
						ArrayList<String> values = tempJugada;

						public int getSize() {
							return values.size();
						}

						public String getElementAt(int index) {
							return values.get(index);
						}
					});
				} else {
					this.btnJugar.setEnabled(false);
					list.setModel(new AbstractListModel<String>() {

						private static final long serialVersionUID = 1L;

						ArrayList<String> values = tempSinCredito;

						public int getSize() {
							return values.size();
						}

						public String getElementAt(int index) {
							return values.get(0);
						}
					});

				}

			} catch (Exception e) {
				e.printStackTrace();
			}
		} 
		else if (event.getSource() == btnCobrarPremiosPendientes) {
			
			sys.cobrarPremiosPendientes();
			this.textField_acumulado.setText(String.valueOf(sys.getPremioAcumulado()));
			
		} else if (event.getSource() == btnAcreditar){
			this.btnJugar.setEnabled(true);
			sys.setCredito(Float.parseFloat(this.textField_credito.getText()));
			textField_Saldo.setText(String.valueOf(this.sys.getCredito()));
		}

	}
}
